Amazon S3 Bucket Management with C#: Part 9 – Uploading a file with its path to a Bucket
Before getting started
Skill Level: Beginner
Assumptions:
- You already gone through Parts 1-8 of Managing Amazon AWS with C#.
Additional information: I sometimes cover small sub-topics in a post. Along with AWS, you will also be exposed to:
- Rhyous.SimpleArgs
Step 1 – Alter the existing UploadFile method in BucketManager.cs
We need the UploadFile method to take in a parameter that specifies the remote directory, which is the directory path on the S3 bucket. However, if no directory is specified, the key should simply be the file name.
- Edit file called BucketManager.cs.
- Enter this new method:
Note: We are in luck, the TransferUtility object has an overload that takes in the key.public static async Task UploadFile(TransferUtility transferUtility, string bucketName, string file, string uploadLocation = null) { var key = Path.GetFileName(file); if (!string.IsNullOrWhiteSpace(uploadLocation)) { uploadLocation = uploadLocation.EndsWith("/") ? uploadLocation : uploadLocation + "/"; key = uploadLocation + key; } await Task.Run(() => transferUtility.Upload(file, bucketName, key)); }
Note: This method is already added to the Action Argument, so we don’t need to update it.
Step 2 – Add a RemoteDirectory Argument
If we are going to upload a file to a specific location, we should know what that specific location is. So add an Argument for it.
- Add the following argument to ArgsHandler.cs.
... new Argument { Name = "RemoteDirectory", ShortName = "rd", Description = "The remote directory on the S3 Bucket.", Example = "{name}=My/Remote/Directory", Action = (value) => { Console.WriteLine(value); } } ...
Step 4 – Update the parameter array passed to UploadFile
We’ve already create a custom parameter array for the UploadFile action. We simply need to add a method for it
// Use the Custom or Common pattern CustomParameters.Add("CreateBucketDirectory", new object[] { s3client, bucketName, Args.Value("Directory") }); CustomParameters.Add("CreateTextFile", new object[] { s3client, bucketName, Args.Value("Filename"), Args.Value("Text") }); CustomParameters.Add("DeleteBucketDirectory", new object[] { s3client, bucketName, Args.Value("Directory") }); CustomParameters.Add("DeleteFile", new object[] { transferUtility, bucketName, Args.Value("Filename") }); CustomParameters.Add("UploadFile", new object[] { transferUtility, bucketName, Args.Value("File"), Args.Value("RemoteDirectory") });
Note: There are enough of these now that I alphabetized them.
You can now specify the remote directory when uploading a file.
Go to: Part 10 – Uploading all files in a directory recursively to an S3 Bucket
Return to: Managing Amazon AWS with C#